#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 10
#define INC 10
#define true 1
#define false 0            
typedef int bool;
typedef int SElemType;
typedef struct{
   SElemType* base;
   SElemType* top;
   int stacksize;
}Stack;
void InitStack(Stack* s)
{
   (*s).base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
   if(!(*s).base) printf("初始化栈失败！！！\n");
   (*s).top=(*s).base;
   (*s).stacksize=STACK_INIT_SIZE;
   printf("创建栈成功！！！\n");
}
void DestroyStack(Stack* s)
{
   int i;
   SElemType* a;
   for(i=(*s).stacksize;i>0;i--)
   {
      a=(*s).base;
      free(a);
      a++;
   }
}
void Push(Stack* s,SElemType e)
{
   if(((*s).top-(*s).base)>=(*s).stacksize)
   {
      (*s).base=(SElemType*)realloc((*s).base,((*s).stacksize+INC)*sizeof(SElemType));
      if(!(*s).base) printf("扩大栈空间失败！！！\n");
      (*s).top=(*s).base+(*s).stacksize;
      *(*s).top=e;
      (*s).top++;
      printf("压栈成功!!!\n");
   }
   *(*s).top=e;
   (*s).top++;
   printf("压栈成功！！！\n");
}
SElemType Pop(Stack* s)
{
   if((*s).top==(*s).base) printf("栈已经空了！！！\n");
   (*s).top--;
   SElemType e=*((*s).top);
   return e;
}
void ClearStack(Stack* s)
{
   int i;
   for(i=(*s).stacksize;i>0;i++)
   {
      Pop(s);
   }
}
bool IsStackEmpty(Stack* s)
{
   if((*s).base==(*s).top)
   return true;
   else
   return false;
}
int StackLength(Stack* s)
{
   int i=(*s).top-(*s).base;
   return i;
}
SElemType GetTop(Stack* s)
{
   return *((*s).top-1);
}
void Show(Stack s)
{
   SElemType* i=s.top;
   while(i!=s.base)
   {
      i--;
      printf("%d\n",*i);
   }
}
void Write(Stack* s)
{
   int num;
   scanf("%d",&num);
   int i;
   for(i=0;i<num;i++)
    {
      SElemType e;
      scanf("%d",&e);
      Push(s,e);
    }
}
void shuzhuan(int a,int b)//把十进制数转换为b进制
{
   Stack s;
   InitStack(&s);
   int i=0;
   while(a!=0)
   {
   i++;
   Push(&s,a%b);
   a=a/b;
   }
   printf("数为：\n");
   while(i!=0)
   {
     printf("%d",Pop(&s));
     i--;
   }
   printf("\n");
}
int main(void)
{
   shuzhuan(17,2);
}







